n = int(input())
arr = list(map(int,input().split()))
xor = [0] * (n+1)
x = 0
for i in range(1,n+1):
x ^= i
xor[i] = x
ans = 0
for i in range(1,n+1):
q = n // i
r = n % i
ans ^= arr[i-1]
if q % 2:
ans ^= xor[i-1]
if r:
ans ^= xor[r]
else:
if r:
ans ^= xor[r]
print(ans)
//
// Created by Xiuyuan Cao on 2023/2/22.
//
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <queue>
#include <limits>
using namespace std;
typedef long long ll;
void solve(){
int n;
cin>>n;
int p[n];
for(int i=0;i<n;i++){
cin>>p[i];
}
int res=0;
for(int i:p){
res^=i;
}
vector<int> preXor(n+1);
for(int i=1;i<=n;i++){
preXor[i]=(preXor[i-1]^i);
}
for(int mod=2;mod<=n;mod++){
int group=n/mod;
int rest=n%mod;
res^=preXor[rest];
if(group%2==1){
res^=preXor[mod-1];
}
}
cout<<res;
}
int main(){
solve();
}
1516A - Tit for Tat | 622. Design Circular Queue |
814. Binary Tree Pruning | 791. Custom Sort String |
787. Cheapest Flights Within K Stops | 779. K-th Symbol in Grammar |
701. Insert into a Binary Search Tree | 429. N-ary Tree Level Order Traversal |
739. Daily Temperatures | 647. Palindromic Substrings |
583. Delete Operation for Two Strings | 518. Coin Change 2 |
516. Longest Palindromic Subsequence | 468. Validate IP Address |
450. Delete Node in a BST | 445. Add Two Numbers II |
442. Find All Duplicates in an Array | 437. Path Sum III |
436. Find Right Interval | 435. Non-overlapping Intervals |
406. Queue Reconstruction by Height | 380. Insert Delete GetRandom O(1) |
332. Reconstruct Itinerary | 368. Largest Divisible Subset |
377. Combination Sum IV | 322. Coin Change |
307. Range Sum Query - Mutable | 287. Find the Duplicate Number |
279. Perfect Squares | 275. H-Index II |